export class StringUtil {
  /** 密码强度正则数组 */
  private static readonly regexArr: RegExp[] = [
    /(?=.{8,}).*/, // 最少 8 个字符
    /^(?=.*[a-z]).*$/, // 必须包含小写字母
    /^(?=.*[A-Z]).*$/, // 必须包含大写字母
    /^(?=.*\d).*$/, // 必须包含数字
    /^(?=.*[!@#$%^&*()_\-+=[\]{};':"\\|,.<>/?]).*$/, // 必须包含特殊字符
  ];

  /**
   * 校验密码强度
   * @param password 密码
   * @returns 密码强度等级
   *  5: 包含大小写字母，数字及特殊字符且字符长度大于8位
   *  4: 包含大小写字母，数字
   *  3: 包含字母，数字且字符长度大于8位
   *  2: 字符长度大于8位
   *  1: 字符长度小于8位
   */
  public static checkPasswordStrength(password: string) {
    let strengthLevel = 0;
    for (let i = 0; i < this.regexArr.length; i++) {
      if (
        this.regexArr[i].test(
          typeof password === 'string' ? password : String(password),
        )
      ) {
        strengthLevel++;
      }
    }
    return strengthLevel;
  }
}
